home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / prefs / prefsdata.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  5KB  |  167 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. import os
  5. import util
  6. from util import dictadd, is_all
  7. from util.observe import observable_dict
  8. import syck
  9. from logging import getLogger
  10. log = getLogger('PrefsData')
  11. info = log.info
  12. warning = log.warning
  13.  
  14. def flatten(mapping, parent_name = ''):
  15.     if not mapping:
  16.         return []
  17.     
  18.     result_list = []
  19.     for key, value in mapping.iteritems():
  20.         path = parent_name + key
  21.         if isinstance(value, dict) or hasattr(key, 'iteritems'):
  22.             result_list.extend(flatten(value, path + '.'))
  23.             continue
  24.         result_list.append((path, value))
  25.     
  26.     return result_list
  27.  
  28.  
  29. def inflate(mappings_list, root = None, dict_factory = dict):
  30.     if not root:
  31.         pass
  32.     root_map = dict_factory()
  33.     for path, value in mappings_list:
  34.         path = path.split('.')
  35.         parent = root_map
  36.         for name in path:
  37.             if path[-1] == name:
  38.                 parent[name] = value
  39.             else:
  40.                 parent.setdefault(name, dict_factory())
  41.             parent = parent[name]
  42.         
  43.     
  44.     return root_map
  45.  
  46. nice_type_names = {
  47.     unicode: 'unicode',
  48.     str: 'str',
  49.     bool: 'boolean',
  50.     int: 'integer',
  51.     list: 'list',
  52.     float: 'float',
  53.     dict: 'dict',
  54.     type(None): 'none' }
  55. from util import dictreverse
  56. nice_name_types = dictreverse(nice_type_names)
  57. __localprefs = None
  58.  
  59. class localprefprop(object):
  60.     
  61.     def __init__(self, key, default):
  62.         if isinstance(key, basestring):
  63.             
  64.             key = lambda s: key
  65.         
  66.         self.key = key
  67.         self.default = default
  68.  
  69.     
  70.     def __get__(self, obj, objtype = None):
  71.         
  72.         try:
  73.             return localprefs()[self.key(obj)]
  74.         except KeyError:
  75.             return self.default
  76.  
  77.  
  78.     
  79.     def __set__(self, obj, val):
  80.         localprefs()[self.key(obj)] = val
  81.  
  82.  
  83.  
  84. def defaultprefs():
  85.     flatten = flatten
  86.     import prefs
  87.     resdir = os.path.join(util.program_dir(), 'res')
  88.     filename = os.path.join(resdir, 'defaults.yaml')
  89.     info('loading default prefs from %s', filename)
  90.     prefs_path = filename
  91.     fc = util.filecontents(prefs_path)
  92.     defaults = util.Storage(flatten(syck.load(fc)))
  93.     platformName = platformName
  94.     import config
  95.     filename = os.path.join(resdir, platformName, 'defaults.yaml')
  96.     if os.path.exists(filename):
  97.         info('loading default platform prefs from %s', filename)
  98.         prefs_path = filename
  99.         fc = util.filecontents(prefs_path)
  100.         platprefs = util.Storage(flatten(syck.load(fc)))
  101.         defaults.update(platprefs)
  102.     
  103.     return defaults
  104.  
  105.  
  106. def localprefs():
  107.     global __localprefs
  108.     import common
  109.     if __localprefs is not None and __localprefs.name == common.profile.name:
  110.         return __localprefs
  111.     
  112.     local_settings = local_settings
  113.     import gui.toolbox
  114.     SavingDictBase = ObservableDict
  115.     import util.observe
  116.     ls = local_settings()
  117.     
  118.     _section = lambda : 'localprefs %s' % common.profile.name
  119.     section = _section()
  120.     if not ls.has_section(section):
  121.         ls.add_section(section)
  122.     
  123.     
  124.     class SavingDict('SavingDict', (SavingDictBase,)):
  125.         import localdefaults
  126.         name = common.profile.name
  127.         
  128.         def __init__(self, save_func, *a, **k):
  129.             self.save = save_func
  130.             SavingDictBase.__init__(self, *a, **k)
  131.  
  132.         
  133.         def __setitem__(self, key, val):
  134.             SavingDictBase.__setitem__(self, key, val)
  135.             self.save(self)
  136.  
  137.         
  138.         def __delitem__(self, key):
  139.             SavingDictBase.__delitem__(self, key)
  140.             self.save(self)
  141.  
  142.         
  143.         def __getitem__(self, key):
  144.             
  145.             try:
  146.                 return SavingDictBase.__getitem__(self, key)
  147.             except KeyError:
  148.                 e = None
  149.                 
  150.                 try:
  151.                     v = getattr(self.localdefaults, key.replace('.', '_'))
  152.                 except AttributeError:
  153.                     raise e
  154.  
  155.                 return None if callable(v) else v
  156.  
  157.  
  158.  
  159.     
  160.     def save(d):
  161.         ls._sections[_section()] = d.copy()
  162.         ls.save()
  163.  
  164.     __localprefs = SavingDict(save, ls.iteritems(section))
  165.     return __localprefs
  166.  
  167.